/**
 * 校验规则
 */
import test from "./test";
// 用户名校验，只能包含字母数字，且以字母开头，3到15位
const USER_NAME_EXP = /[a-zA-Z][a-zA-Z0-9]{3,15}/;

// // 手机号校验
// const MOBILE_EXP = /^1[3456789]\d{9}$/;

// // 固定电话校验，地区码3或4位且0开头，号码7到8位，中间-连接
// const PHONE_EXP = /^(\d{3,4}(-)\d{7,8})$/;

// 手机号或固定电话校验
const MOBILE_OR_PHONE_EXP = /^((\d{3,4}(-)\d{7,8})|(1[3456789]\d{9}))$/;

// 密码校验规则，8~20位，包含大写字母、小写字母、数字、特殊字符（!@#$%&*(){}+-）中至少三种，且不出现空格
const PASSWORD_EXP =
  /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z~!@#$%&*(){}+-]+$)(?![a-z0-9]+$)(?![a-z~!@#$%&*(){}+-]+$)(?![0-9~!@#$%&*(){}+-]+$)[a-zA-Z0-9~!@#$%&*(){}+-]{8,20}$/;
// // 邮箱校验规则
// const MAIL_EXP =
//   /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;

// 身份证校验规则
// const ID_NUMBER_EXP =
//   /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/

// // 邮政编码校验规则
// const POSTAL_CODE_EXP = /^[1-9][0-9]{5}$/;

// // 车牌号校验规则
// const CAR_NUMBER_EXP =
//   /^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$/;

// // url校验规则
// const URL_EXP =
//   /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i;

// 登录密码校验规则
export function validatoerPassword(password: string): boolean {
  if (!password) {
    return false;
  }
  return PASSWORD_EXP.test(password);
}

// 登录账号的校验规则
export function validatoerUserName(username: string): boolean {
  if (!username) {
    return false;
  }
  return USER_NAME_EXP.test(username);
}

// 手机号或者固话校验
export function validatoerPhoneNumOrMobileNum(phoneNum: string): boolean {
  if (!phoneNum) {
    return false;
  }
  return MOBILE_OR_PHONE_EXP.test(phoneNum);
}

/*
 *type string 校验的类型包含以下几种
 * url   校验是否URL链接
 * carNo, 校验旧车牌号和新能源类型车牌号
 * idCard  校验是否身份证号 身份证号，包括尾数为"X"的类型，可以校验通过
 * number 校验是否十进制数值 整数，小数，负数，带千分位数(2,359.08)等可以检验通过
 * amount   校验是否金额 最多两位小数，可以带千分位
 * chinese  校验是否是汉字 可以为单个汉字，或者汉字组成的字符串
 * letter   校验是否是字母 只能为"a-z"或者"A-Z"之间的字符
 * digits 校验是否整数  所有字符都在0-9之间，才校验通过
 * email 校验是否是邮箱
 * object 校验是否是对象
 * jsonString 校验是否是json字符串 注意：请留意json字符串的要求：1.整体为一个字符串 2.字符串对象内的属性需要用""双引号包含
 * array 校验是否数组
 *
 * validatorContent 需要校验的内容
 */
export function validatorObject(type: string, validatorContent: string): boolean {
  return test[type](validatorContent);
}

/*
 *校验是否验证码(要求为数字)，返回true或者false
 *value <String> 验证码字符串
 *len <Number> 验证码长度，默认为6
 */
export function validatorCode(code: string, len: number) {
  test.code(code, len);
}

// /*
// 校验是否URL链接，返回true或者false
// */
// export function validatoerURL(Url: string): boolean {
//   if (!Url) {
//     return false;
//   }
//   return test.url(Url);
// }

// /*
// 可以校验旧车牌号和新能源类型车牌号，结果返回true或者false。
// */
// export function validatoercarNo(carNo: string): boolean {
//   if (!carNo) {
//     return false;
//   }
//   return test.carNo(carNo);
// }

// /*
// 身份证号，包括尾数为"X"的类型，可以校验通过，结果返回true或者false
// */
// export function validatoeridCard(idCard: string): boolean {
//   if (!idCard) {
//     return false;
//   }
//   return test.idCard(idCard);
// }
